﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using vudu.Presentacion.Contrato.VU_05_Gestionar_Practicas_por_Materia;
using vudu.Logica.Fachada;
using vudu.ClasesDominio;

namespace vudu.Presentacion.Presentador.VU_05_Gestionar_Practicas_por_Materia
{
    public class PresentadorAgregarSeccionPractica
    {
        #region Attributes
            public IContratoAgregarSeccionPractica _vista;
            private EnlaceLogico _fachada;
            private Escuela _miEscuela;
            private List<Materia> _misMaterias;
            public HorarioDeClase _miHorarioSeleccionado;
            private string _rol;
        #endregion endAttributes

        #region Constructor

            public PresentadorAgregarSeccionPractica(IContratoAgregarSeccionPractica vista)
            {
                _vista = vista;
                _rol = (string)_vista.Sesion["TipoRol"];
                InitSecure(_rol);
            }

        #endregion endConstructor

        protected void InitSecure(string miRol)
        {
            //Valida el inicio de sesion;
            //con el usuario correcto;
             
            if ((miRol != null) && (miRol.Equals("Escuela")))
            {
                _fachada = (EnlaceLogico)_vista.Sesion["Fachada"];
                _miEscuela = (Escuela)_fachada.RolActual;
                _vista.LabelEscuela.Text = _miEscuela.NombreEscuela;
                _misMaterias = _fachada.ObtenerMateriasActivasConSeccTeoria(_miEscuela.NombreEscuela);
                _miHorarioSeleccionado = new HorarioDeClase();
            }
            else
            { _vista.Redirect("../VU_15 Gestion de Acceso/InicioSistema.aspx"); }
        }

        public void UnLoadDdlGeneric(DropDownList myDdl)
        {
            //Reinicia las propiedades de un elemento
            //de tipo DropDownList
             
            ListItem myListItem = new ListItem();
            myDdl.Items.Clear();
            myListItem.Value = "0";
            myListItem.Text = "- Seleccionar -";
            myDdl.Items.Add(myListItem);
            myDdl.Visible = false;
        }

        protected int GetHrsReq(int idMateriaSelect)
        {
            //obtiene las horas establecidas para una materia             
            int hrsReq = 0;
            bool bandera = false;
            for (int index = 0; (index < _misMaterias.Count) && (!bandera); index++)
            {
                if (_misMaterias[index].Codigo == idMateriaSelect)
                {
                    hrsReq = _misMaterias[index].HorasPractica;
                    bandera = true;
                }
            }
            return hrsReq;
        }

        #region UnLoadTableHorarioComponents

            public void UnVisibleAllDdlSalon()
            {
                //Coloca la propiedad visible de los elementos de la GUI correspondientes
                //a la Row de "Salon" en false
                _vista.DdlSalonLun.Visible = false;
                _vista.DdlSalonMar.Visible = false;
                _vista.DdlSalonMie.Visible = false;
                _vista.DdlSalonJue.Visible = false;
                _vista.DdlSalonVie.Visible = false;
            }
            public void UnLoadAllDdlSalon()
            {
                //Reinicia las propiedades de cada elemento correspondiente
                //a la Row de "Salon"
                UnLoadDdlGeneric(_vista.DdlSalonLun);
                UnLoadDdlGeneric(_vista.DdlSalonMar);
                UnLoadDdlGeneric(_vista.DdlSalonMie);
                UnLoadDdlGeneric(_vista.DdlSalonJue);
                UnLoadDdlGeneric(_vista.DdlSalonVie);
                UnVisibleAllDdlSalon();
            }

            public void UnVisibleAllDdlFin()
            {
                //Coloca la propiedad visible de los elementos de la GUI correspondientes
                //a la Row de "Hora Fin" en false
                _vista.DdlFinLun.Visible = false;
                _vista.DdlFinMar.Visible = false;
                _vista.DdlFinMie.Visible = false;
                _vista.DdlFinJue.Visible = false;
                _vista.DdlFinVie.Visible = false;
            }
            public void UnLoadAllDdlFin()
            {
                //Reinicia las propiedades de cada elemento correspondiente
                //a la Row de "Hora Fin"
                UnLoadDdlGeneric(_vista.DdlFinLun);
                UnLoadDdlGeneric(_vista.DdlFinMar);
                UnLoadDdlGeneric(_vista.DdlFinMie);
                UnLoadDdlGeneric(_vista.DdlFinJue);
                UnLoadDdlGeneric(_vista.DdlFinVie);
                UnVisibleAllDdlFin();
                UnLoadAllDdlSalon();
            }

            public void UnLoadAllDdlIni()
            {
                //Reinicia las propiedades de cada elemento correspondiente
                //a la Row de "Hora Inicio"
                UnLoadDdlGeneric(_vista.DdlIniLun);
                UnLoadDdlGeneric(_vista.DdlIniMar);
                UnLoadDdlGeneric(_vista.DdlIniMie);
                UnLoadDdlGeneric(_vista.DdlIniJue);
                UnLoadDdlGeneric(_vista.DdlIniVie);
                UnLoadAllDdlFin();
            }

        #endregion EndUnLoadTableHorarioComponents

        #region UnLoadUpperComponents

            public void UnVisibleHorario()
            {
                //Coloca la propiedad visible de los elementos de la GUI
                //correspondientes a la Row de "Horarios" en false
                _vista.LabelOHrsSelect.Visible = false;
                _vista.LabelHrsSelect.Visible = false;
                _vista.LabelNumHrsSelect.Visible = false;
                _vista.TableHorario.Visible = false;
                _vista.LabelNumHrsSelect.Text = "0";
            }
            protected void UnLoadHorario()
            {
                //Reinicia las propiedades de los elementos
                //DropDownList de "Hora Inicio"
                UnLoadAllDdlIni();
                UnVisibleHorario();
            }

            public void UnVisibleAllProfesor()
            {
                //Coloca la propiedad visible de los elementos de la GUI
                //correspondientes a la Row de "Profesor" en false
                _vista.LabelOProfesor.Visible = false;
                _vista.LabelProfesor.Visible = false;
                _vista.DdlProfesor.Visible = false;
            }
            protected void UnLoadAllDdlProfesor()
            {
                //Reinicia las propiedades de los elementos
                //correpondientes al Row "Profesor" y a los
                //demas elementos que dinamicamente se alimenten
                //de el
                UnLoadDdlGeneric(_vista.DdlProfesor);
                UnLoadHorario();
                UnVisibleAllProfesor();
            }

            public void UnVisibleAllSeccTeoria()
            {
                //Coloca la propiedad visible de los elementos de la GUI
                //correspondientes a la Row de "Seccion" en false                 
                _vista.LabelOSeccTeoria.Visible = false;
                _vista.LabelSeccTeoria.Visible = false;
                _vista.LabelHrsReq.Visible = false;
                _vista.LabelNumHrsReq.Visible = false; 
            }
            protected void UnLoadAllDdlSeccTeoria()
            {
                //Reinicia las propiedades de los elementos
                //correpondientes al Row "Seccion" y a los
                //demas elementos que dinamicamente se alimenten
                //de el                 
                UnLoadDdlGeneric(_vista.DdlSeccTeoria);
                UnLoadAllDdlProfesor();
                UnVisibleAllSeccTeoria();
            }

        #endregion endUnLoadUpperComponents

        #region VisibleUpperComponents

            protected void VisibleSeccTeoria()
            {
                //Coloca en true la propiedad visible
                //de los elementos que corresponden
                //al Row "Seccion"                 
                _vista.LabelOSeccTeoria.Visible = true;
                _vista.LabelSeccTeoria.Visible = true;
                _vista.DdlSeccTeoria.Visible = true;
                _vista.LabelHrsReq.Visible = true;
                _vista.LabelNumHrsReq.Visible = true;
            }

            protected void VisibleProfesor()
            {
                //Coloca en true la propiedad visible
                //de los elementos que corresponden
                //al Row "Profesor"                 
                _vista.LabelOProfesor.Visible = true;
                _vista.LabelProfesor.Visible = true;
                _vista.DdlProfesor.Visible = true;
            }

            protected void VisibleHorario()
            {
                //Coloca en true la propiedad visible
                //de los elementos que corresponden
                //al Row "Horario"                 
                _vista.LabelOHrsSelect.Visible = true;
                _vista.LabelHrsSelect.Visible = true;
                _vista.LabelNumHrsSelect.Visible = true;
                _vista.TableHorario.Visible = true;
            }

        #endregion endVisibleUpperComponents

        #region SettingHoraIni

            protected void SetHoraIniDay(DropDownList myDdl)
            {
                //Llena un DropDownList con las horas de inicio
                //de clases de 7am a 8pm                 
                for (int index = 7; index < (20); index++ )
                {
                    ListItem myItem = new ListItem();
                    myItem.Value = index.ToString();
                    myItem.Text = index.ToString() + ":00";
                    myDdl.Items.Add(myItem);
                }
                myDdl.Visible = true;
            }

            protected void SetHoraIniWeek()
            {
                //Llena los DropDownList de cada dia
                //de la semana                 
                SetHoraIniDay(_vista.DdlIniLun);
                SetHoraIniDay(_vista.DdlIniMar);
                SetHoraIniDay(_vista.DdlIniMie);
                SetHoraIniDay(_vista.DdlIniJue);
                SetHoraIniDay(_vista.DdlIniVie);
            }

        #endregion endSettingHoraIni

        #region SettingHoraFin

            public void LoadDdlHoraFin(DropDownList myDdlFin, DropDownList myDdlIni)
            {
                //Verifica las horas seleccionadas y las suma a la hora de inicio
                //seleccionada previamente, para hacer el llenado del DDL de la
                //hora final de clases, valida si el valor seleccionado en la hora
                //de inicio es correcto                  
                int hrsSelect = Convert.ToInt32(myDdlIni.SelectedItem.Value);
                int hrsReq = Convert.ToInt32(_vista.LabelNumHrsReq.Text);
                if (!myDdlIni.SelectedItem.Value.Equals("0"))
                {
                    for (int index = 1; (index <= hrsReq) && ((index + hrsSelect) <= 20); index++)
                    {
                        ListItem myItem = new ListItem();
                        myItem.Value = (index + hrsSelect).ToString();
                        myItem.Text = (index + hrsSelect).ToString() + ":00";
                        myDdlFin.Items.Add(myItem);
                    }
                    myDdlFin.Visible = true;
                }
                else
                { myDdlFin.Visible = false; }
            }

            public void UnLoadDdlHoraFin(DropDownList myDdlFin, DropDownList myDdlSalon)
            {
                //Vacia los DropDownList de Hora Fin y de los que
                //dinamicamente se alimenten de el                  
                UnLoadDdlGeneric(myDdlFin);
                UnLoadDdlGeneric(myDdlSalon);
                myDdlSalon.Visible = false;
            }

        #endregion endSettingHoraFin
        
        #region LoadingSalonesForEachHorario

            public void SetHeadersHorario(DropDownList myDdl)
            {
                //Llena el atributo Dia del objeto de tipo
                //Horario de clase, segun sea el DDL evaluado                 
                if (myDdl.ID.Equals("ddlIniLun"))
                { _miHorarioSeleccionado.Dia = "Lunes"; }
                else if (myDdl.ID.Equals("ddlIniMar"))
                { _miHorarioSeleccionado.Dia = "Martes"; }
                else if (myDdl.ID.Equals("ddlIniMie"))
                { _miHorarioSeleccionado.Dia = "Miercoles"; }
                else if (myDdl.ID.Equals("ddlIniJue"))
                { _miHorarioSeleccionado.Dia = "Jueves"; }
                else if (myDdl.ID.Equals("ddlIniVie"))
                { _miHorarioSeleccionado.Dia = "Viernes"; }
            }

            public void SetHorarioForSearching(DropDownList ddlIni, DropDownList ddlFin, DropDownList ddlSalon)
            {
                //Valida que la hora fin sea correct para proceder
                //a la busqueda del salon correspondiente                 
                if (!ddlFin.SelectedItem.Value.Equals("0"))
                {
                    DateTime myHourFin = new DateTime(1900, 01, 01, Convert.ToInt32(ddlFin.SelectedItem.Value), 00, 0);
                    DateTime myHourIni = new DateTime(1900, 01, 01, Convert.ToInt32(ddlIni.SelectedItem.Value), 00, 0);

                    _miHorarioSeleccionado.HoraFin = myHourFin;
                    _miHorarioSeleccionado.HoraInicio = myHourIni;

                    SetHeadersHorario(ddlIni);
                    LoadDdlSalon(ddlSalon);
                }
                else
                {
                    UnLoadDdlGeneric(ddlSalon);
                    ddlSalon.Visible = false;
                }
            }

            protected void FillDdlSalones(DropDownList myDdl, List<Salon> misSalones)
            {
                //Se realiza el llenado del DDL de salones disponibles
                //con la lista de salones obtenida en el algoritomo de busqueda                  
                myDdl.Enabled = true;
                for (int index = 0; index < misSalones.Count; index++)
                {
                    ListItem myListItem = new ListItem();
                    myListItem.Value = misSalones[index].NumeroSalon.ToString();
                    myListItem.Text = misSalones[index].Nombre;
                    myDdl.Items.Add(myListItem);
                }
            }

            protected void FillDdlSalonesNotfound(DropDownList ddlSalon)
            {
                //En caso de la lista estar vacia, se bloquea el DDL
                //y se notifica que no hay salones disponibles para
                //ese horario                
                ddlSalon.Enabled = false;
                ddlSalon.Items.Clear();
                ListItem myListItem = new ListItem();
                myListItem.Value = "0";
                myListItem.Text = "Salón No Disponible";
                ddlSalon.Items.Add(myListItem);

            }

            public void LoadDdlSalon(DropDownList ddlSalon)
            {
                //se ejecuta el algoritmo de busqueda para un horario determinado              
                int idProfesor = Convert.ToInt32(_vista.DdlProfesor.SelectedItem.Value);
                List<Salon> misSalones = new List<Salon>();
                misSalones = _fachada.ListaSalonesDisponibles(_miHorarioSeleccionado, _miEscuela.NombreEscuela, _miEscuela.IdEscuela, idProfesor);
                if ((misSalones != null) && (misSalones.Count > 0))
                { FillDdlSalones(ddlSalon, misSalones); }
                else
                { FillDdlSalonesNotfound(ddlSalon); }
                ddlSalon.Visible = true;
            }

        #endregion endLoadingSalonesForEachHorario

        #region SettingHrsSelected

            public void CheckHrsLun()
            {
                //se realiza el seteo del valor de la etiqueta de
                //horas seleccionadas dinamicamente los lunes                 
                if (!_vista.DdlSalonLun.SelectedItem.Value.Equals("0"))
                {
                    int hrsFin = Convert.ToInt32(_vista.DdlFinLun.SelectedItem.Value);
                    int hrsIni = Convert.ToInt32(_vista.DdlIniLun.SelectedItem.Value);
                    int hrsSelect = Convert.ToInt32(_vista.LabelNumHrsSelect.Text);
                    hrsSelect = hrsSelect + (hrsFin - hrsIni);
                    _vista.LabelNumHrsSelect.Text = hrsSelect.ToString();
                }
            }

            public void CheckHrsMar()
            {
                //se realiza el seteo del valor de la etiqueta de
                //horas seleccionadas dinamicamente los martes
                 
                if (!_vista.DdlSalonMar.SelectedItem.Value.Equals("0"))
                {
                    int hrsFin = Convert.ToInt32(_vista.DdlFinMar.SelectedItem.Value);
                    int hrsIni = Convert.ToInt32(_vista.DdlIniMar.SelectedItem.Value);
                    int hrsSelect = Convert.ToInt32(_vista.LabelNumHrsSelect.Text);
                    hrsSelect = hrsSelect + (hrsFin - hrsIni);
                    _vista.LabelNumHrsSelect.Text = hrsSelect.ToString();
                }
            }

            public void CheckHrsMie()
            {
                //se realiza el seteo del valor de la etiqueta de
                //horas seleccionadas dinamicamente los miercoles
                 
                if (!_vista.DdlSalonMie.SelectedItem.Value.Equals("0"))
                {
                    int hrsFin = Convert.ToInt32(_vista.DdlFinMie.SelectedItem.Value);
                    int hrsIni = Convert.ToInt32(_vista.DdlIniMie.SelectedItem.Value);
                    int hrsSelect = Convert.ToInt32(_vista.LabelNumHrsSelect.Text);
                    hrsSelect = hrsSelect + (hrsFin - hrsIni);
                    _vista.LabelNumHrsSelect.Text = hrsSelect.ToString();
                }
            }

            public void CheckHrsJue()
            {
                //se realiza el seteo del valor de la etiqueta de
                //horas seleccionadas dinamicamente los jueves
                 
                if (!_vista.DdlSalonJue.SelectedItem.Value.Equals("0"))
                {
                    int hrsFin = Convert.ToInt32(_vista.DdlFinJue.SelectedItem.Value);
                    int hrsIni = Convert.ToInt32(_vista.DdlIniJue.SelectedItem.Value);
                    int hrsSelect = Convert.ToInt32(_vista.LabelNumHrsSelect.Text);
                    hrsSelect = hrsSelect + (hrsFin - hrsIni);
                    _vista.LabelNumHrsSelect.Text = hrsSelect.ToString();
                }
            }

            public void CheckHrsVie()
            {
                //se realiza el seteo del valor de la etiqueta de
                //horas seleccionadas dinamicamente los viernes
                 
                if (!_vista.DdlSalonVie.SelectedItem.Value.Equals("0"))
                {
                    int hrsFin = Convert.ToInt32(_vista.DdlFinVie.SelectedItem.Value);
                    int hrsIni = Convert.ToInt32(_vista.DdlIniVie.SelectedItem.Value);
                    int hrsSelect = Convert.ToInt32(_vista.LabelNumHrsSelect.Text);
                    hrsSelect = hrsSelect + (hrsFin - hrsIni);
                    _vista.LabelNumHrsSelect.Text = hrsSelect.ToString();
                }
            }

            public void SetHrsSelect()
            {
                //hace un recorrido y suma las horas seleccionadas por dia
                //para mostrarlo en la etiqueta labelHrsSelect. realiza los
                //trabajos de estandarixacion, si se cumple permite continuar
                //en caso contrario obliga al usuario a detenerse, o colocar las
                //horas correctas
                  
                int idMateria = Convert.ToInt32(_vista.DdlMateria.SelectedItem.Value);
                _vista.LabelNumHrsSelect.Text = "0";
                CheckHrsLun();
                CheckHrsMar();
                CheckHrsMie();
                CheckHrsJue();
                CheckHrsVie();
                if (Convert.ToInt32(_vista.LabelNumHrsSelect.Text) == GetHrsReq(idMateria))
                { 
                    _vista.BtnNextPractica.Visible = true;
                    _vista.BtnBackPractica.Visible = true;
                    _vista.BtnBackPracticaCenter.Visible = false;
                    _vista.LabelNumHrsSelect.ForeColor = System.Drawing.Color.Black;
                    _vista.LabelHrsSelect.ForeColor = System.Drawing.Color.Black;
                }
                else
                { 
                    _vista.BtnNextPractica.Visible = false;
                    _vista.BtnBackPractica.Visible = false;
                    _vista.BtnBackPracticaCenter.Visible = true;
                    _vista.LabelNumHrsSelect.ForeColor = System.Drawing.Color.Red;
                    _vista.LabelHrsSelect.ForeColor = System.Drawing.Color.Red;
                }
            }

        #endregion SettingHrsSelected

        #region Loaders

            public void LoadDdlMateria()
            {
                //carga el listado de materias con secciones teoricas existentes
                //y activas para una escuela determinada
                 
                for (int index = 0; index < _misMaterias.Count; index++)
                {
                    ListItem myListItem = new ListItem();
                    myListItem.Value = _misMaterias[index].Codigo.ToString();
                    myListItem.Text = _misMaterias[index].Nombre;
                    _vista.DdlMateria.Items.Add(myListItem);
                }
            }

            public void LoadDdlSeccTeoria()
            {
                //arma una lista con de secciones;
                //Para mas adelante llenar el ddl de;
                //seccion teorica de la interfaz;
                List<SeccionMateria> misSecciones = new List<SeccionMateria>();
                int idMateriaSelect = Convert.ToInt32(_vista.DdlMateria.SelectedItem.Value);
                UnLoadAllDdlProfesor();
                UnLoadHorario();
                if (idMateriaSelect == 0)
                { UnLoadAllDdlSeccTeoria(); }
                else
                {
                    _vista.LabelNumHrsReq.Text = GetHrsReq(idMateriaSelect).ToString() ;
                
                    misSecciones = _fachada.ArmarListaDeSeccionesDisponibles(_miEscuela.IdEscuela, idMateriaSelect);
                    string seccionCod = "00";
                    for (int index = 0; index < misSecciones.Count; index++)
                    {
                        ListItem myListItem = new ListItem();
                        myListItem.Value = misSecciones[index].IdSeccionMateria.ToString();
                        myListItem.Text = seccionCod + misSecciones[index].Codigo;
                        _vista.DdlSeccTeoria.Items.Add(myListItem);
                    }
                    VisibleSeccTeoria();
                }
            }

            public void LoadDdlProfesor()
            {
                //arma una lista con de profesores;
                //Para mas adelante recorrerla y llenar
                //el ddl de profesores de la interfaz;
                int idSeccTeoria = Convert.ToInt32(_vista.DdlSeccTeoria.SelectedItem.Value);
                if (idSeccTeoria == 0)
                {
                    UnLoadAllDdlProfesor();
                    UnLoadHorario();
                }
                else
                {
                    List<Profesor> misProfesores = new List<Profesor>();
                    misProfesores = _fachada.ConsultarProfesores(_miEscuela.IdEscuela);
                    for (int index = 0; index < misProfesores.Count; index++)
                    {
                        ListItem myListItem = new ListItem();
                        myListItem.Value = misProfesores[index].Crn.ToString();
                        myListItem.Text = misProfesores[index].Nombre + " " + 
                                            misProfesores[index].Apellido;
                        _vista.DdlProfesor.Items.Add(myListItem);
                    }
                    VisibleProfesor();
                }
            }

            public void LoadTableHorario()
            {
                if (_vista.DdlProfesor.SelectedItem.Value.Equals("0"))
                {   UnLoadHorario(); }
                else
                {
                    UnLoadAllDdlIni();
                    SetHoraIniWeek();
                    VisibleHorario();
                }
            }

        #endregion endLoaders

        #region SettingFinalHrsSelected

            public void CheckFinalHrsLun(List<HorarioDeClase> misHorariosDef)
            {
                //revisa si hay un salon seleccionado en el ddl salon
                //en caso de estar seleccionado, obtiene su horario
                //desde la interfaz y se guarda en un objeto de tipo
                //lista de horarios
                HorarioDeClase miHorarioDef = new HorarioDeClase();
                Salon miSalon = new Salon();
                if (!_vista.DdlSalonLun.SelectedItem.Value.Equals("0"))
                {
                    DateTime myHourFin = new DateTime(1900, 01, 01, Convert.ToInt32(_vista.DdlFinLun.SelectedItem.Value), 00, 0);
                    DateTime myHourIni = new DateTime(1900, 01, 01, Convert.ToInt32(_vista.DdlIniLun.SelectedItem.Value), 00, 0);
                    miSalon.NumeroSalon = Convert.ToInt32(_vista.DdlSalonLun.SelectedItem.Value);
                    miHorarioDef.Dia = "Lunes";
                    miHorarioDef.HoraFin = myHourFin;
                    miHorarioDef.HoraInicio = myHourIni;
                    miHorarioDef.SalonDeClase = miSalon;
                    misHorariosDef.Add(miHorarioDef);
                }
            }

            public void CheckFinalHrsMar(List<HorarioDeClase> misHorariosDef)
            {
                //revisa si hay un salon seleccionado en el ddl salon
                //en caso de estar seleccionado, obtiene su horario
                //desde la interfaz y se guarda en un objeto de tipo
                //lista de horarios
                HorarioDeClase miHorarioDef = new HorarioDeClase();
                Salon miSalon = new Salon();
                if (!_vista.DdlSalonMar.SelectedItem.Value.Equals("0"))
                {
                    DateTime myHourFin = new DateTime(1900, 01, 01, Convert.ToInt32(_vista.DdlFinMar.SelectedItem.Value), 00, 0);
                    DateTime myHourIni = new DateTime(1900, 01, 01, Convert.ToInt32(_vista.DdlIniMar.SelectedItem.Value), 00, 0);
                    miSalon.NumeroSalon = Convert.ToInt32(_vista.DdlSalonMar.SelectedItem.Value);
                    miHorarioDef.Dia = "Martes";
                    miHorarioDef.HoraFin = myHourFin;
                    miHorarioDef.HoraInicio = myHourIni;
                    miHorarioDef.SalonDeClase = miSalon;
                    misHorariosDef.Add(miHorarioDef);
                }
            }

            public void CheckFinalHrsMie(List<HorarioDeClase> misHorariosDef)
            {
                //revisa si hay un salon seleccionado en el ddl salon
                //en caso de estar seleccionado, obtiene su horario
                //desde la interfaz y se guarda en un objeto de tipo
                //lista de horarios
                HorarioDeClase miHorarioDef = new HorarioDeClase();
                Salon miSalon = new Salon();
                if (!_vista.DdlSalonMie.SelectedItem.Value.Equals("0"))
                {
                    DateTime myHourFin = new DateTime(1900, 01, 01, Convert.ToInt32(_vista.DdlFinMie.SelectedItem.Value), 00, 0);
                    DateTime myHourIni = new DateTime(1900, 01, 01, Convert.ToInt32(_vista.DdlIniMie.SelectedItem.Value), 00, 0);
                    miSalon.NumeroSalon = Convert.ToInt32(_vista.DdlSalonMie.SelectedItem.Value);
                    miHorarioDef.Dia = "Miercoles";
                    miHorarioDef.HoraFin = myHourFin;
                    miHorarioDef.HoraInicio = myHourIni;
                    miHorarioDef.SalonDeClase = miSalon;
                    misHorariosDef.Add(miHorarioDef);
                }
            }

            public void CheckFinalHrsJue(List<HorarioDeClase> misHorariosDef)
            {
                //revisa si hay un salon seleccionado en el ddl salon
                //en caso de estar seleccionado, obtiene su horario
                //desde la interfaz y se guarda en un objeto de tipo
                //lista de horarios
                HorarioDeClase miHorarioDef = new HorarioDeClase();
                Salon miSalon = new Salon();
                if (!_vista.DdlSalonJue.SelectedItem.Value.Equals("0"))
                {
                    DateTime myHourFin = new DateTime(1900, 01, 01, Convert.ToInt32(_vista.DdlFinJue.SelectedItem.Value), 00, 0);
                    DateTime myHourIni = new DateTime(1900, 01, 01, Convert.ToInt32(_vista.DdlIniJue.SelectedItem.Value), 00, 0);
                    miSalon.NumeroSalon = Convert.ToInt32(_vista.DdlSalonJue.SelectedItem.Value);
                    miHorarioDef.Dia = "Jueves";
                    miHorarioDef.HoraFin = myHourFin;
                    miHorarioDef.HoraInicio = myHourIni;
                    miHorarioDef.SalonDeClase = miSalon;
                    misHorariosDef.Add(miHorarioDef);
                }
            }

            public void CheckFinalHrsVie(List<HorarioDeClase> misHorariosDef)
            {
                //revisa si hay un salon seleccionado en el ddl salon
                //en caso de estar seleccionado, obtiene su horario
                //desde la interfaz y se guarda en un objeto de tipo
                //lista de horarios
                HorarioDeClase miHorarioDef = new HorarioDeClase();
                Salon miSalon = new Salon();
                if (!_vista.DdlSalonVie.SelectedItem.Value.Equals("0"))
                {
                    DateTime myHourFin = new DateTime(1900, 01, 01, Convert.ToInt32(_vista.DdlFinVie.SelectedItem.Value), 00, 0);
                    DateTime myHourIni = new DateTime(1900, 01, 01, Convert.ToInt32(_vista.DdlIniVie.SelectedItem.Value), 00, 0);
                    miSalon.NumeroSalon = Convert.ToInt32(_vista.DdlSalonVie.SelectedItem.Value);
                    miHorarioDef.Dia = "Viernes";
                    miHorarioDef.HoraFin = myHourFin;
                    miHorarioDef.HoraInicio = myHourIni;
                    miHorarioDef.SalonDeClase = miSalon;
                    misHorariosDef.Add(miHorarioDef);
                }
            }

            public List<HorarioDeClase> SetFinalHrsSelect()
            {
                //revisa si hay un salon seleccionado en el ddl salon
                //en caso de estar seleccionado, obtiene su horario
                //desde la interfaz y se guarda en un objeto de tipo
                //lista de horarios
                List<HorarioDeClase> misHorariosDef = new List<HorarioDeClase>();
                CheckFinalHrsLun(misHorariosDef);
                CheckFinalHrsMar(misHorariosDef);
                CheckFinalHrsMie(misHorariosDef);
                CheckFinalHrsJue(misHorariosDef);
                CheckFinalHrsVie(misHorariosDef);
                return misHorariosDef;
            }

        #endregion endSettingFinalHrsSelected

        public int SetNumNewSecc(List<SeccionMateria> misSecciones, int idSeccTeoria)
        {
            //busca el ultimo numero de seccion practica asignado
            //para una seccion de teoria dada
            int numSecc = 1;
            int indexSecc = 0;
            bool bandera = false;
            for (int index = 0; (index < misSecciones.Count) && !bandera; index++)
            {
                if (misSecciones[index].IdSeccionMateria == idSeccTeoria)
                {
                    if ((misSecciones[index].ListaPractica) != null && (misSecciones[index].ListaPractica.Count > 0))
                    {
                        indexSecc = misSecciones[index].ListaPractica.Count;
                        numSecc = misSecciones[index].ListaPractica[indexSecc - 1].NumeroSeccion + 1;
                        bandera = true;
                    }
                }
            }
            return numSecc;
        }

        public void GenerarSeccionPractica()
        {
            //se va armando un objeto de tipo practica con todos los datos
            //recogidos durante todo el proceso, para luego insertarla
            //en la base de datos. Se inicializan luego los elementos de la
            //interfaz
            List<HorarioDeClase> misHorarios = new List<HorarioDeClase>();
            List<SeccionMateria> misSecciones = new List<SeccionMateria>();
            Practica miPractica = new Practica();
            Profesor miProf = new Profesor();

            int idMateria = Convert.ToInt32(_vista.DdlMateria.SelectedItem.Value);
            int idSeccTeoria = Convert.ToInt32(_vista.DdlSeccTeoria.SelectedItem.Value);

            misSecciones = _fachada.ArmarListaDeSeccionesDisponibles(_miEscuela.IdEscuela, idMateria);

            int numSecc = SetNumNewSecc(misSecciones, idSeccTeoria);

            miProf.Crn = Convert.ToInt32(_vista.DdlProfesor.SelectedItem.Value);

            misHorarios = SetFinalHrsSelect();

            miPractica.profesor = miProf;
            miPractica.NumeroSeccion = numSecc;
            miPractica.NombrePractica = "Practica " + _vista.DdlMateria.SelectedItem.Text;
            miPractica.horarioDeClase = misHorarios;

            if (_fachada.CrearPractica(miPractica, idSeccTeoria))
            { _vista.LabelStatus.Text = "Operacion Exitosa"; }
            else
            { _vista.LabelStatus.Text = "Operacion Exitosa"; }
            
            UnLoadAllDdlSeccTeoria();
            _vista.BtnNextPractica.Visible = false;
            _vista.BtnBackPractica.Visible = false;
            _vista.BtnBackPracticaCenter.Visible = true;
            UnLoadDdlGeneric(_vista.DdlMateria);
            _vista.DdlMateria.Visible = true;
            LoadDdlMateria();
        }
    }
}